void main() {
  // 变量 var final const
  // var 声明的变量没有类型, 对变量的类型自动识别, 如果赋值给其他类型的值会报错
  var a;
  a = 10;
  a = 'hello';
  print(a);


  // const
  // 1.常量不能再赋值
  // 2.声明赋值必须同时进行
  // 3.一旦声明不能修改
  // 4、必须是编译期的常量

  // 报错
  // const a;
  // a = 11;

  const map = {"name": "zhufeng"};
  // map["name"] = "zf";
  // print(map);

  sum(a, b) => a + b;
  // const声明的值不能是计算后得出的结果
  // const c = sum(10, 20);

  // final
  // 1.常量不能再赋值
  // 2.声明赋值必须同时进行
  // 3.声明可以修改，不能再赋值
  // 4、可以是编译期的常量，也可以是运行后的结果
  final b = {"name": "小明"};
  b["name"] = "小小明";
  print(b);

  final c = sum(1, 2);
  print(c);

  // ?? 非空判断
  var a1;
  var b1 = "Java";
  var c1 = a1 ?? b1; // 前面的值不为空，取前者，前面值为空，取后者。
  print(c1);
}
